001    /*
002     * Copyright 2004-2005 Mort Bay Consulting Pty. Ltd.
003     * Copyright 2006 Stephen McConnell.
004     *
005     * Licensed under the Apache License, Version 2.0 (the "License");
006     * you may not use this file except in compliance with the License.
007     * You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    package net.dpml.test.http;
019    
020    import java.io.IOException;
021    
022    import javax.servlet.Filter;
023    import javax.servlet.FilterChain;
024    import javax.servlet.FilterConfig;
025    import javax.servlet.ServletContext;
026    import javax.servlet.ServletException;
027    import javax.servlet.ServletRequest;
028    import javax.servlet.ServletResponse;
029    
030    /** 
031     * TestFilter.
032     * @author gregw
033     */
034    public class TestFilter implements Filter
035    {
036        private ServletContext m_context;
037        
038       /** 
039        * Filter initialization.
040        * @param filterConfig the filter configuration
041        * @exception ServletException if a servlet error occurs
042        */
043        public void init( FilterConfig filterConfig ) throws ServletException
044        {
045            m_context = filterConfig.getServletContext();
046        }
047    
048        /**
049        * Process a filter request.
050        * @param request the request
051        * @param response the response
052        * @param chain the filter chain
053        * @exception IOException if an I/O error occurs
054        * @exception ServletException if a servlet error occurs
055        * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
056         */
057        public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain )
058            throws IOException, ServletException
059        {
060            Integer oldValue = null;
061            try
062            {
063                oldValue = (Integer) request.getAttribute( "testFilter" );
064                Integer value = null;
065                if( null == oldValue )
066                {
067                    value = new Integer( 1 );
068                }
069                else
070                {
071                    value = new Integer( oldValue.intValue() + 1 );
072                }
073                
074                request.setAttribute( "testFilter", value );
075                m_context.setAttribute( "request" + request.hashCode(), value );
076                chain.doFilter( request, response );
077            }
078            finally
079            {
080                request.setAttribute( "testFilter", oldValue );
081                m_context.setAttribute( "request" + request.hashCode(), oldValue );
082            }
083        }
084    
085       /**
086        * Destroy the instance.
087        * @see javax.servlet.Filter#destroy()
088        */
089        public void destroy()
090        {
091        }
092    
093    }